go的if 寫法很簡單,打個if就會出現Snippet可選擇,按下ENTER就會自動產生程式碼
package main
import "fmt"
func main() {
if condition {
}
}
把condition改成要寫的判斷邏輯就完成最基本的if判斷式。
package main
import "fmt"
func main() {
a := 7
b := 8
if a < b {
fmt.Println("A < B")
}
}
如果要寫if else的判斷式,要照著官方的寫法才行喔,else跟 {的位置不可以亂改,會導致編譯失敗。
package main
import "fmt"
func main() {
a := 7
b := 8
c := 9
//標準寫法
if a < b {
fmt.Println("A < B")
} else {
fmt.Println("A > B")
}
//if else if
if a > b {
fmt.Println("A > B")
} else if c > b {
fmt.Println("c > B")
} else {
fmt.Println("b >c")
}
//FREE STYLE,母湯R~~~GOOGLE不要讓你這樣子寫
if a < b{
fmt.Println("A < B")
}
else
{
fmt.Println("A > B")
}
}
unexpected else, expecting }
unexpected { after top level declaration
一個題外話,if else如果能少用,if else if else 這樣子的判斷式更要避免,
雖然編譯跟邏輯上是合理的,但是對閱讀CODE來說是負面的,以下是張很有名的梗圖
當你一直用IF ELSE來寫判斷式時,你的程式碼就會變成這個形狀,
可考慮這樣子作
package main
import "fmt"
func main() {
a := 7
b := 8
var result bool
//if else寫法,沒有不好,只是有更簡潔的寫法
if a > b {
result = true
} else {
result = false
}
//只用if就做到if else作的判斷,可考慮這樣子寫
//有可能會導致程式碼行長變多,但是可讀性會比較好
result = false
if a > b {
result = true
}
if result {
fmt.Println("a > b")
}
}
在go中是用switch來作選擇性敘述,一樣有Snippet,打出switch,選擇Snippet按下ENTER產生程式碼
package main
import "fmt"
func main() {
switch expression {
case condition:
}
}
某些情境下,你用if也可以完成判斷式,但是就程式碼會變的很髒,不美觀,
多條件時可考慮用switch來完成你的判斷式,程式碼也簡潔好閱讀。
package main
import "fmt"
func main() {
price := getPrice("toyota")
fmt.Println("toyota price:", price)
price = getPrice("lexus")
fmt.Println("lexus price:", price)
price = getPrice("ferrari")
fmt.Println("ferrari price:", price)
//如果用IF就要寫成波動拳惹~~
car := "toyota"
if car == "toyota" {
fmt.Println("toyota price:", 650000)
} else if car == "lexus" {
fmt.Println("lexus price:", 1500000)
} else if car == "bmw" {
fmt.Println("bmw price:", 2500000)
}
//或是一堆IF
if car == "toyota" {
fmt.Println("toyota price:", 650000)
}
if car == "lexus" {
fmt.Println("lexus price:", 1500000)
}
if car == "bmw" {
fmt.Println("bmw price:", 2500000)
}
}
func getPrice(car string) (ret int) {
switch car {
case "toyota":
ret = 650000
case "lexus":
ret = 1500000
case "bmw":
ret = 2500000
case "porsche":
ret = 4500000
default:
ret = 0
}
return ret
}